`
https://leetcode.cn/problems/valid-triangle-number/
`

/**
 * @param {number[]} nums
 * @return {number}
 */
var triangleNumber = function (nums) {
  // 先排序，方便双指针
  nums.sort((a, b) => a - b);
  let n = nums.length, res = 0;
  // 枚举最长边
  for (let k = n - 1; k >= 2; k--) {
    let i = 0, j = k - 1;
    // 双指针寻找另外两条边
    while (i < j) {
      // 如果两边之和大于第三边，说明 [i, j-1] 范围内的任意两边之和都大于第三边
      if (nums[i] + nums[j] > nums[k]) {
        // 直接计算组合数
        res += j - i;
        j--;
      } else {
        i++;
      }
    }
  }
  return res;
};